[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
Scalaで文字列同士を連結する方法をご紹介します。
Stringクラス同士の連結は +
演算子で連結することができます。
val str1 = "hello" val str2 = "world" println(str1 + " " + str2)
結果は次の通りです。
hello world
文字列の補間
Scalaには文字列の補間と呼ばれる機能があります。
""
で囲われた文字列リテラルの先頭にs
, f
, raw
といった補間子と呼ばれるものを付けることで補間が行われます。
例えば、 +
演算子でこのような連結をしていたとします。
val year = "2019" val month = "4" val day = "1" println(year + "/" + month + "/" + day)
結果は次の通りです。
2019/4/1
+
での連結を繰り返す場合、 s
を用いるのがスッキリかけて便利です。
s
を使うことで、文字列リテラルの中で $
を変数の先頭につけて展開することができます。
val year = "2019" val month = "4" val day = "1" println(s"$year/$month/$day")
+
で結合したのと同じものが出力されます。
2019/4/1
f
の場合、文字列リテラルの中で $
を先頭につけた変数の末尾にprintfと同じフォーマット指定子を付与することで展開が行えます。
val pi: Float = 3.141592653589793f println(f"pi => $pi%1.2f")
フォーマット指定付きで展開されたものが出力されます。
pi => 3.14
raw
を使うと、エスケープを無視します。
println(raw"hello world\n")
改行コードを無視したそのままの文字列が出力されます。
hello world\n
StringBuilder
実はStringクラスは不変です。
したがって、結合するたびに新しいインスタンスを生成します。
そのため、結合を繰り返したり、大きな文字列を生成したりする場合にメモリの消費が大きくなります。
その場合には可変なStringBuilderクラスを利用しましょう。
StringBuilderクラスのインスタンスはappend
メソッドで自身に文字列を連結していくことができます。
StringクラスへはtoString
メソッドを使うことで変換することができます。
val str = new StringBuilder str.append("hello") str.append(" ") str.append("world") println(str.toString)
append
で順に結合したものが出力されます。
hello world
補足
str1 + str2
のように文字列を連結するのに使用していた +
演算子は、実はStringクラスのメソッドです。
冗長ですし実用的でもありませんが、str1.+(str2)
と書いて呼び出すこともできます。